home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TP031592.ARJ / 03-15-92.TPC
Text File  |  1992-03-15  |  35KB  |  1,003 lines

  1.  
  2. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3.  
  4. Conference 4
  5. Date       03-08-92 09:33:50
  6. From       Dj Murdoch
  7. To         Ken Burrows
  8. Subject    Re: InLine to BASM
  9.  
  10.  KB> This function works just fine as inline, but I wanted to try my
  11. KB> hand at a little BASM. The inline code is translated from this
  12. KB> short assembly routine
  13. KB>     Pop DX
  14. KB>     mov AH,$02
  15. KB>     int $17
  16. KB>     mov AL,AH
  17. KB>     xor AL,$90
  18. KB> My question concerns why it did not work as a BASM function
  19. KB> when I used the Pop instruction, but it does work with the MOV
  20. KB> instruction.
  21. Inline code is inserted in line - there's no procedure call.  That means
  22. that an integer or word argument is on the top of the stack when you enter
  23. it, so POP DX works.
  24. BASM code is compiled to a separate procedure.  The top of stack has a return
  25. address, not an argument.  If you use POP DX, you'll get the wrong value,
  26. and mess up the return address.  (In fact, I think there's a PUSH BP generated
  27. by the compiler
  28. at the beginning of your code, so you'll get that, not the return address,
  29. but you'll be in just as much of a mess.)
  30. Something that I'm hoping for in the next release of TP is the ability to
  31. use BASM for inline macros.
  32. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  33.  
  34.  
  35. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  36.  
  37. Conference 4
  38. Date       03-08-92 22:10:00
  39. From       Norbert Igl
  40. To         Jeff Mitchell
  41. Subject    Parallel Porting..
  42.  
  43.  >      So, what exactly I need to do: Plug a parallel cable into the ST
  44. > and AT. Read and write from/to the port. I can create my own
  45. > protocols
  46. > and such, or convert existing ones. No problem. The actual Bios calls
  47. > and such on the PC I have little clue of, for this particular
  48. > application.
  49. >      Anyone ever done such a deed? Any input, or suggestions?
  50. Hi Jeff....(:-)
  51. I've done +exactly+ this for DOS... in assembler (:-(
  52. it's a device driver/ TSR combo, works on then parallel port(s)
  53. of 2 PC's. The only disatvantage is, since most P-ports are
  54. +uni+directional, only a 4-bit-transfer is possible...
  55. a simple cut :
  56. ;================================================
  57. ;             send data
  58. ;================================================
  59. ; input : si=buffer, cx=len
  60. ; output: CY=error , NC=ok
  61. ; changed registers: ax, bl, cx, si, di
  62. ;
  63. send_block proc near
  64.    mov   ah,0
  65. sb1:
  66.    mov   di, CountDown
  67. sb2:
  68.    in    al, dx
  69.    shl   al, 1
  70.    jnc   sb4
  71.    lodsb
  72.    add   CRC, ax
  73.    mov   bl,  al
  74.    or    al,  16    ; lower 4 Bit w/ SYNC
  75.    dec   dx
  76.    out   dx,  al
  77.    inc   dx
  78.    shr   bl,  1
  79.    shr   bl,  1
  80.    shr   bl,  1
  81.    shr   bl,  1
  82. sb3:
  83.    in    al,  dx
  84.    shl   al,  1
  85.    jc    sb5
  86.    mov   al,  bl    ; upper 4 Bit w/o SYNC
  87.    dec   dx
  88.    out   dx,  al
  89.    inc   dx
  90.    loop  sb1
  91.    clc
  92. sb_ret:
  93.    ret
  94. sb4:
  95.    dec   di
  96.    jnz   sb2
  97.    jmp   short sb_error
  98. sb5:
  99.    dec   di
  100.    jnz   sb3
  101. sb_error:
  102.    stc
  103.    jmp   short sb_ret
  104. send_block endp
  105. ;
  106. ;================================================
  107. ;    Receive Data
  108. ;================================================
  109. ; Parameter di=buffer,
  110. ;           cx=buffersize
  111. ;           bx=Ticks,
  112. ;           dx=Port+1
  113. ; Return    CY=error
  114. ;           NC=ok
  115. ;           bx=command
  116. ;           cx=received bytes
  117. ;           ax=returncode
  118. ;
  119. LL_receive proc near
  120.    mov   bufadr, di
  121.    mov   maxlen, cx
  122.    call  Init        ; reset Port(dx)
  123.    jc    rec_ret
  124. rec1:
  125.    mov   crc   , 0
  126.    call  LL_rec_byte
  127.    jc    rec_retry
  128.    cmp   al, kopf     ; Header for data packet
  129.    jne   rec_retry
  130.    call  LL_rec_byte
  131.    jc    rec_retry
  132.    cmp   al, kopf+1
  133.    jne   rec_retry
  134.    mov   cx, H_LEN-2
  135.    lea   di, kopf+2
  136.    call  LL_rec_block
  137.    jc    rec_retry
  138.    mov   cx, len
  139.    jcxz  rec2       ; Header w/o data
  140.    cmp   cx, maxlen
  141.    ja    rec_retry
  142.    mov   di, bufadr
  143.    call  LL_rec_block
  144.    jc    rec_retry
  145. rec2:
  146.    push  CRC
  147.    lea   di, _W_Dum   ; buffer for 1 WORD
  148.    mov   cx, 2
  149.    call  LL_rec_block
  150.    mov   ax, _W_Dum
  151.    pop   CRC
  152.    jc    rec_retry
  153.    cmp   ax, CRC      ; CRC-Check
  154.    mov   al, NAK
  155.    jne   rec3
  156.    mov   al, ACK
  157. rec3:
  158.    dec   dx
  159.    out   dx, al
  160.    inc   dx
  161.    mov   bx, ACK+256*NAK
  162.    call  pattern
  163.    jc    rec_retry
  164.    mov   bx, command    ; what to do ?
  165.    mov   cx, len
  166.    cmp   al, ACK
  167.    mov   ax, OK
  168.    je    rec_ret
  169. rec_retry:
  170.    call  chk_time_err   ; timeout ?
  171.    jnc   rec1
  172. rec_ret:
  173.    ret
  174. LL_receive endp
  175. ;
  176. ;-------------------------------------
  177. ;      _B_Dum: get 1 byte
  178. ;-------------------------------------
  179. ;
  180. LL_rec_byte proc near
  181.    mov   cx,  1
  182.    mov   di,  offset _B_Dum   ; buffer for1 byte
  183.    call  LL_rec_block
  184.    mov   al, _B_Dum
  185.    ret
  186. LL_rec_byte endp
  187. ;
  188. ;-------------------------------------
  189. ; Params: DX=Port+1, ES:DI=Buffer, CX=Count
  190. ; Return    CY = Error
  191. LL_rec_block proc near
  192.    mov ah,0
  193. llrb1:
  194.    mov si, CountDown
  195.    mov al,0
  196.    dec dx
  197.    out dx,al
  198.    inc dx
  199.    mov bl,16
  200. llrb2:
  201.    in al,dx
  202.    shl al,1
  203.    jc llrb4
  204.    in al,dx
  205.    xchg bl,al
  206.    dec dx
  207.    out dx,al
  208.    inc dx
  209.    shr bl,1
  210.    shr bl,1
  211.    shr bl,1
  212. llrb3:
  213.    in al,dx
  214.    shl al,1
  215.    jnc llrb5
  216.    in al,dx
  217.    shl al,1
  218.    and al,0f0h
  219.    or al,bl
  220.    stosb         ; -> [es:di]
  221.    add CRC, ax
  222.    loop llrb1      ; CX--
  223.    clc
  224. llrb_ret:
  225.    ret
  226. llrb4:
  227.    dec si
  228.    jnz llrb2
  229.    jmp short llrb_err
  230. llrb5:
  231.    dec si
  232.    jnz llrb3
  233. llrb_err:
  234.    stc
  235.    jmp short llrb_ret
  236. LL_rec_block endp
  237. ;
  238. ;------------------------------------------
  239. ;  Wait for 4-bit-pattern
  240. ;------------------------------------------
  241. ; Parameter BL = 1. value , BH = 2. value
  242. ; Return    CY = Timeout, else value in al
  243. ;
  244. ;
  245. Pattern proc near
  246.        mov si, CountDown
  247. pa1:    in al,dx
  248.        xor al,80h
  249.        shr al,1
  250.        shr al,1
  251.        shr al,1
  252.        cmp al,bl   ; equ 1 value ?
  253.        je pa_ret
  254.        xchg bl,bh  ; or 2. ?
  255.        dec si
  256.        jnz pa1
  257.        call chk_time_err
  258.        jnc Pattern
  259. Pa_ret: ret
  260. Pattern endp
  261. ;---------------------------------
  262. ;   init
  263. ;---------------------------------
  264. ; Parameter dx=port+1
  265. ;           bx=ticks
  266. ; Return    NC,  dx=port+1
  267. ;
  268. Init proc near
  269.     cld
  270.     mov  Ticks, bx
  271.     call Biostime
  272.     mov  begin, ax
  273.     Dec dx
  274.     mov al,0
  275.     out dx,al
  276.     inc dx
  277.     clc
  278.     ret
  279. init endp
  280. ;--------------------------------
  281. ;     read Bios-timer
  282. ;--------------------------------
  283. ; Return : AX = Ticker
  284. biostime proc near
  285.    push ds
  286.    mov ax,40h
  287.    mov ds,ax
  288.    mov ax,ds:[6ch]
  289.    pop ds
  290.    ret
  291. biostime endp
  292. ;-----------------------------------
  293. ;   Timeout ?
  294. ;-----------------------------------
  295. ;  Return: CY = Timeout
  296. ;
  297. chk_time_err proc near
  298.    call Biostime
  299.    sub ax, begin
  300.    cmp Ticks ,ax   ; CY,  if AX > TICKS
  301.    mov ax,ERROR
  302. chk_ret:
  303.    ret
  304. chk_time_err endp
  305. ;
  306.   Hope, you get some ideas......
  307. Bye from Germany, Norbert
  308. BTW.. not all data-declarations in here, most are global vars....
  309. * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  310.  
  311.  
  312. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  313.  
  314. Conference 4
  315. Date       03-08-92 04:31:10
  316. From       Mark Ouellet
  317. To         Tom Przeor
  318. Subject    Re: Pkunzip to nul
  319.  
  320.     On 03 Mar 92, you, Tom Przeor, of 3:640/821.0 wrote...
  321. TP> Hi Robert,
  322. TP>
  323. RH>>Why using a COMMAND environment and not just starting
  324. RH>>pkunzip by searching for the right path thru fsearch ?
  325. RH>>EXEC(fexpand(fsearch('PKUNZIP.EXE',getenv('PATH'))), 'test.zip
  326. RH>> >NUL');
  327. TP> You need command processor for redirection to work, your method is
  328. TP> fine but '>NUL' won't work.
  329. OOPS missed that one when I replied to him ;-)
  330.        Best regards,
  331.        Mark Ouellet.
  332. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  333.  
  334.  
  335. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  336.  
  337. Conference 4
  338. Date       03-09-92 08:02:10
  339. From       Mark Ouellet
  340. To         Eugene Mok
  341. Subject    Re: Swapping on EXEC...
  342.  
  343.     On 01 Mar 92, you, Eugene Mok, of 3:633/160.0 wrote...
  344. EM> If you like to call Australia, it's yours:
  345. EM>
  346. EM> SPAWNO40.zip   95894  6-Dec-91  (src) replacement for spawn()
  347. This one I allready got.
  348. EM> SPAWNO40.pat    1065 11-Feb-92  official patch to spawno40 12/1/91
  349. What does the official patch correct????
  350.        Best regards,
  351.        Mark Ouellet.
  352. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  353.  
  354.  
  355. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  356.  
  357. Conference 4
  358. Date       03-09-92 17:39:40
  359. From       Mark Ouellet
  360. To         Tom Przeor
  361. Subject    Re: Why I like TP 5.5 IDE mo
  362.  
  363.     On 06 Mar 92, you, Tom Przeor, of 3:640/821.0 wrote...
  364. TP> Hi Jud,
  365. TP>
  366. JM>>1) The 5.5 IDE gives me 24K more available memory than 6.0 does
  367. JM>>(378K vs 354K).  This is crucial in being able to develop my bread-
  368. TP> I think I can help you, try the following. Use TPUMOVER to extract
  369. TP> all standard units from TURBO.TPL and put them in your unit
  370. TP> directory. Then in IDE go to Options/Environment/Startup and make
  371. TP> sure that 'Load TURBO.TPL' option is not selected (if you not into
  372. TP> graphics leave all boxes empty except 'Use expanded memory'). Set
  373. TP> window/editor/overlay heap sizes to min: 24/28/64 - while using EMS
  374. TP> you don't need big overlay heap. Exit and restart IDE, go to
  375. TP> File/Get Info and check free memory, I get 451k on my system and you
  376. TP> should get a little more. Anyway it will be over 70k better than
  377. TP> TP5.5 - not bad for a memory hungry IDE.
  378. Nice going Tom,
  379.        Even I had overlooked those options, figuring since
  380. his reports were the same as mine there was no way it
  381. couldn't work.
  382.        Best regards,
  383.        Mark Ouellet.
  384. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  385.  
  386.  
  387. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  388.  
  389. Conference 4
  390. Date       03-09-92 18:13:50
  391. From       Mark Ouellet
  392. To         Jud Mccranie
  393. Subject    Re: TP 6.0 IDE memory
  394.  
  395.     On 05 Mar 92, you, Jud Mccranie, of 1:370/520.0 wrote...
  396. JM> DJ and Tom showed me how to get 101K more available in the 6.0
  397. JM> IDE.  (and I thought I had it optimized)
  398. JM>
  399. JM> So all of the "I hate TP 6 IDE because it gives me 24K less than
  400. JM> 5.5, which keeps me from running my big programs" ultimately turned
  401. JM> out to be wrong.
  402. JM>
  403. JM> Since I do the majority of work on that one big program I'm going to
  404. JM> give TP 6 another try.  Before I thought I couldn't use the TP 6 IDE
  405. JM> for it, so I thought why go through the pain of it if I can't use it
  406. JM> most of the time.  I didn't want to be jumping between 5.5 and 6.0
  407. JM> either.  I still have reservations about 6.0 IDE, they have lifted a
  408. JM> major roadblock in my acceptance of it.  Maybe the pain that comes
  409. JM> with the 6.0 IDE will be worth the gain now.
  410. Well Jud,
  411.        It takes a big man to admit publicly he was wrong. I
  412. wasn't totaly right myself. I looked at your memory reports
  413. and stoped there concluding it should have worked since
  414. mine was about the same. I have to admit Tom showed me a few
  415. tricks to.
  416.        Don't worry about the 6.0 IDE, in the end you will
  417. adapt to it pretty fast, probably as fast as adapting from
  418. 3.0 to 4.0+.
  419. BTW if you can't adapt to the 6.0 IDE, don't despair,
  420. Borland Pascal++ is just around the corner ;-)
  421.        Best regards,
  422.        Mark Ouellet.
  423. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  424.  
  425.  
  426. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  427.  
  428. Conference 4
  429. Date       03-09-92 18:42:10
  430. From       Mark Ouellet
  431. To         Mark Sandfox @ 970/201
  432. Subject    Re: Memory
  433.  
  434.     On 02 Mar 92, you, Mark Sandfox @ 970/201, of 1:10/8.0 wrote...
  435. MS> I have a large source code 400k+ that I can not compile.  I keep
  436. MS> recieving segment too large.  My system has 2meg onboard ram and I have
  437.  
  438. MS> tp 6.0 not the professional one.  What can I do?  I am totally lost,
  439. any
  440. MS>
  441. MS> help would be greatly appreciated.  Thanks for your time and have a
  442.  
  443. MS> great day.
  444. Mark,
  445.        The exact message is probably "Data segment too
  446. large"??? If so then you are trying to declare more than 64k
  447. worth of variables.
  448. !!!!! No matter how much memory you have you can not declare
  449. more than 64k of data.
  450.        If you really need more than 64k storage, I suggest
  451. you change some of those variables to pointers and declare
  452. the space needed on the heap. A pointer uses only 4 bytes of
  453. data space in the data segment but can point to a portion of
  454. memory reserved for it on the heap that can be as large as
  455. 65520 bytes.
  456. Take a look at the manual under "Pointers"
  457.        Best regards,
  458.        Mark Ouellet.
  459. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  460.  
  461.  
  462. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  463.  
  464. Conference 4
  465. Date       03-09-92 20:14:10
  466. From       Mark Ouellet
  467. To         Ruurd Pels
  468. Subject    Re: Why I Like Tp 5.5 Ide (continued)
  469.  
  470.     On 05 Mar 92, you, Ruurd Pels, of 2:512/23.0 wrote...
  471. JM>> f) The new Find and Find and Replace functions are very poorly
  472. JM>> designed.
  473. JM>> It is extremely difficult to change the options.  I often want to
  474. JM>> change the search options.  Under 5.5 I commonly use U, GU, GUN,
  475. JM>> GWN, UW, and maybe one or two more, plus backwards search versions
  476. JM>> of some of these (UB, etc).  In TP 5.5 you just type in what you
  477. JM>> want.  In 6.0 you have to go through a very difficult process every
  478. JM>> time you want to change the options.  You can't get around through
  479. JM>> the illogically-laid out boxes with the cursor keys.
  480. JM>> It automatically puts the current word in the search window.  In
  481. JM>> some ways this is nice, but it causes problems.
  482. JM>> There are some advantages to it
  483. JM>> automatically putting in the current word, however for what I do
  484. JM>> most of the time this is a disadvantage since it takes me extra
  485. JM>> keystrokes to get it out or change it to what I want.
  486. RP> Did you look in the history feature of those dialogs? I know it's your
  487.  
  488. RP> major gripe with the IDE, but I can't escape the idea that this is
  489. RP> related to the combination TP6IDE/Jud McCranie more or less ;-).
  490. Wekk on this one Ruurd,
  491.        Jud asn't noticed yet that if the first thing you do
  492. is start typing, TP automatically erases the default search
  493. string for what you are typing. Just like SideKick used to
  494. do, if the first keystroke is not a cursor key or ins. or
  495. del. or home etc... then it erases the input and assumes you
  496. want to start from scratch.
  497.        Best regards,
  498.        Mark Ouellet.
  499. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  500.  
  501.  
  502. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  503.  
  504. Conference 4
  505. Date       03-09-92 20:18:40
  506. From       Mark Ouellet
  507. To         Duke Normandin
  508. Subject    Re: TurboBBS
  509.  
  510.     On 06 Mar 92, you, Duke Normandin, of 1:134/49.0 wrote...
  511. DN> Is anyone familiar with this program, or know the whereabout of its
  512. DN> author, Robert H. Maxwell, last known to have been living in Vancouver,
  513. DN> British Columbia, Canada?
  514. Duke,
  515.        I think he drowned off the coast of some foreign country ;-)
  516.        Best regards,
  517.        Mark Ouellet.
  518. * Origin: One Beer gets me Drunk.... Usualy the 47th ;-) (Fidonet 1:240/1.4)
  519.  
  520.  
  521. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  522.  
  523. Conference 4
  524. Date       03-09-92 21:07:00
  525. From       Norbert Igl
  526. To         Erik Swenson
  527. Subject    Binary Tree Linked Lists
  528.  
  529.  > Anyone got a really SHORT method of deleting a node from a binary
  530. > tree linked list?  I've made one, but it's ALOT longer than I like:
  531. > type
  532. >   Pointer = ^Item;
  533.        ^ bad name....
  534.     IPtr = ^Item
  535.    Item = record
  536.             Data : char;
  537.             Left, Right : IPtr;           end;
  538.  hmmm, let's see...
  539.  procedure Deletenode(Var Head:IPtr; Var ch:char);
  540.  procedure FindNode( VAR a,l,r : IPtr; ch:char);
  541.  begin
  542.    (* start at top with "a" *)
  543.    if a.data = ch then
  544.    begin
  545.      l := a.left;
  546.      r := a.right;
  547.    end else
  548.    while (a<>nil) and (ch<>a.data) do
  549.    begin
  550.      if ch > a.data
  551.         then a:=a.left
  552.         else if ch < a.data
  553.                 then a := a.right
  554.                  else
  555.                  begin   (* found it! *)
  556.                    r := a.right;
  557.                    l := a.left;
  558.                  end
  559.    end;
  560.  end;   (* returns a=nil for "not found" *)
  561.  var _left,_act,_right : IPtr;
  562.  begin
  563.    _left  := nil;
  564.    _right := nil;
  565.    _akt   := head;
  566.    findNode(_akt, _left, _right, ch);
  567.    if _akt <> nil then  (* got it ! *)
  568.    begin
  569.      _left^.right := _right;   (* left.right-> "act, akt.right ->" _right
  570. *)
  571.      _right^.left := _left;    (* right.left-> "act, akt.left  ->" _left
  572. *)
  573.                                (               " ....deleted.... "
  574.  *)
  575.      (* maybe free the alloc. memory ?
  576.      dispose(_akt);
  577.      *)
  578.    end;
  579.   procedure Delete(var head:IPtr);
  580. >   var
  581. >     ch:char;
  582.       q:IPtr;
  583. >   begin
  584. >     writeln('Enter the node to delete: ');
  585. >     readln(ch);
  586. >     p:=head;
  587. >     deletenode(p,ch);
  588. >   end;
  589.   Not tested!!!
  590.   but i assume, it should work....
  591. Bye from Germany, Norbert
  592. * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  593.  
  594.  
  595. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  596.  
  597. Conference 4
  598. Date       03-11-92 09:44:00
  599. From       Terry Hughes
  600. To         Kevin Higgins
  601. Subject    Execute With Swap
  602.  
  603.  KH> > TH> ExecWSwp combines the old ExecSwap with the old ExecWin (which
  604. KH> > TH> let you confine a child process's output to a specified window).
  605. KH> > TH> So now we have one unit, ExecWSwp that can do swap execs plus
  606. KH> > TH> keep the child's output within a window.
  607. KH>    Was this posted? I missed it!
  608. Both are available on our BBS (719-260-9726).
  609. -Terry
  610. * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  611. * Origin: The Programmers Playhouse (1:128/60)
  612.  
  613.  
  614. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  615.  
  616. Conference 4
  617. Date       03-09-92 08:37:20
  618. From       Dj Murdoch
  619. To         Greg Williams
  620. Subject    Re: TP 6.0 disassembler...
  621.  
  622.  GW> Found another TurboPascal Unit (.TPU) disassembler for pascal version
  623. 6.0
  624. GW> It's called TPU60.* (comes to about 120K) and "decompiles"
  625. GW> TPU files, including all constants (internal or external),
  626. GW> all procedures/functions, objects (untested as yet),
  627. GW> optionally provides assembly code (ie. disassembles each
  628. GW> procedure) and cross-references everything, and even
  629. GW> includes the names of the *.OBJ files (if any) you linked
  630. GW> in as external procedures!
  631. Yes, I've seen that one, and it's really good.  If you want to patch a .TPU
  632. file, that's the one to get.
  633. GW> BTW:  Anyone got any reasons why Borland doesn't produce a
  634. GW> structure of .TPU files?   Why do they have to be found by
  635. GW> individual's on a trial and error basis?
  636. Anything documented has to be supported, and gets more objections from users
  637. when it changes.  Most people have no need to know the internal structure
  638. of a .TPU file, so I guess Borland doesn't think it's worth the trouble to
  639. publish it.
  640. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  641.  
  642.  
  643. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  644.  
  645. Conference 4
  646. Date       03-09-92 18:22:30
  647. From       Dj Murdoch
  648. To         Brian Evans
  649. Subject    Re: INLINE TO BASM
  650.  
  651.  > Function GetPStatus(pnum:word):byte; assembler;
  652. BE> This function definition means no parameters are copied to local storage.
  653. BE> ( check p.305 of the 6.0 Programmers Guide ) So  PNUM must be treated
  654. as a
  655. BE> VAR paramter since it wasn't pushed onto the stack.
  656. Page 305 is talking about string parameters, not words passed by value.
  657. Pnum will be pushed onto the stack.
  658. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  659.  
  660.  
  661. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  662.  
  663. Conference 4
  664. Date       03-09-92 20:49:40
  665. From       Dj Murdoch
  666. To         Peter Hebert
  667. Subject    Re: TP 6.0 IDE memory
  668.  
  669.  > I still have reservations about 6.0 IDE
  670. PH> Me too.  It's taken two of my source files and, in the
  671. PH> first $A00 bytes or so, replaced every other byte with a
  672. PH> NUL.  So the first parts of those two files ended up looking like:
  673. PH> P o r m H p y r g a ;      (Program HappyProgram;)
  674. That looks as though your program was overwriting some of the memory belonging
  675. to the IDE.  The pattern makes it look as though you were trying to write
  676. to video memory.  Do you think that might be it?
  677. In cases when I can't reproduce a "bug", I always suspect my own error rather
  678. than a bug with the tools.  They're predictable, I'm not.
  679. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  680.  
  681.  
  682. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  683.  
  684. Conference 4
  685. Date       03-11-92 21:07:00
  686. From       Dj Murdoch
  687. To         Ruurd Pels
  688. Subject    Re: Runtime Error 200 On An Xt.
  689.  
  690.  RP> Hmmmm. Funny. Did you doublecheck? I thought that running
  691. RP> G+ code on an XT immediately killed it, because of the
  692. RP> LEAVE and ENTER machine instructions, which an XT does not
  693. RP> know about.
  694. The 8086 and 8088 just ignore the first byte of instructions that they don't
  695. understand.  That means just about anything can happen with a G+ program
  696. that doesn't test that it's on a 286+.
  697. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  698.  
  699.  
  700. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  701.  
  702. Conference 4
  703. Date       03-11-92 21:11:30
  704. From       Dj Murdoch
  705. To         Frank Masingill
  706. Subject    Re: InLine to BASM
  707.  
  708.  FM>      I've just started to play around with INLINE in TP.
  709. FM> Would you explain in a bit more detail just exactly WHAT
  710. FM> happens when an INLINE sequence is executed?
  711. Sure.  First, a general explanation, and then I'll answer your specific questionThere are two uses of Inline in TP - inline statements, and inline procedures/fuHere's an example of an inline statement:
  712. var
  713.  i : integer; begin
  714.  if i > 1000 then
  715.    Inline($CC); end.
  716. What happens here is that the compiler just sticks the byte $CC into the
  717. code stream; nothing else.  ($CC is the opcode for a call to the debug interruptso this will make your program stop when i > 1000 if you're in the debugger
  718. or IDE, but
  719. usually does nothing outside it.)
  720. Inline procedures/functions are just a little bit more complicated.  An example
  721. of one of those would be:
  722.  procedure CallDebugger;
  723.  inline($CC);
  724. Now you could code the previous program as
  725. var
  726.  i : integer; begin
  727.  if i > 1000 then
  728.    CallDebugger; end.
  729. and the compiler would generate *exactly* the same code as in the first version.Inline functions/procedures are like macros in assembler or C; they just
  730. expand to an inline statement.
  731. The only twist with inline procedures/functions is that you're allowed to
  732. give them arguments, and allowed to pretend that they're returning values.
  733. For example,
  734. function LongAdd(a,b:word):longint; inline($59/            { pop bx }
  735.       $58/            { pop ax }
  736.       $31/$d2/        { xor dx,dx }
  737.       $01/$d8/        { add ax,bx }
  738.       $13/$d2);       { adc dx,dx }
  739. If you have an expression like
  740.  l := LongAdd(50000,50000);
  741. then this is what happens:
  742. Just as if a regular function was coming, TP pushes the values of the two
  743. arguments onto the stack.  Then, instead of making a function call, it just
  744. inserts the LongAdd macro.
  745. The reason this works is as follows.  The LongAdd macro first pops the two
  746. arguments from the stack into the AX and BX registers.  It then clears the
  747. DX register, adds BX into AX, and if the add overflowed, adds the carry bit
  748. into DX.
  749. The result is that the longint result ends up stored in the register pair
  750. DX:AX.  Since that's where longint valued functions are supposed to return
  751. their results, the whole scheme works.
  752. FM> What, for
  753. FM> example is taken care of in BEGIN and END.
  754. BEGIN and END don't have anything to do with INLINE.
  755. FM> Are all of the
  756. FM> registers pushed with BEGIN.
  757. No.  Only the BP register (the stack frame pointer) is pushed.
  758. FM> Is there some kind of
  759. FM> popping of registers and then an exit code produced with
  760. FM> END; ?
  761. Yes, the typical code produced by END is something like this:
  762.  For functions, move the local result variable into the appropriate registers.
  763.  Restore the stack pointer to its value just after pushing BP.
  764.  Pop BP.
  765.  Return.
  766. FM> Also, is it ever possible to insert TP code into
  767. FM> the MIDDLE of an INLINE sequence?
  768. You can put TP code in between INLINE statements, but you can't put it into
  769. the inline procedure/function.
  770. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  771.  
  772.  
  773. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  774.  
  775. Conference 4
  776. Date       03-11-92 22:11:40
  777. From       Dj Murdoch
  778. To         Gerald Gutierrez
  779. Subject    Re: basm string function..
  780.  
  781.  GG> Hi Dj, thanks for the information. This is what I have at the moment:
  782. GG> Function GetFossilIDString:string;
  783. GG> Assembler;
  784. First, I wouldn't make this an assembler procedure.  It's easier to handle
  785. Pascal procedures; you won't call this one often enough to justify the effort
  786. of putting it in assembler.  Nevertheless...
  787. GG>   ASM
  788. GG>     mov ax,seg FossilInformation
  789. GG>     mov es,ax
  790. GG>     mov di,offset FossilInformation
  791. GG>     mov ah,1bh
  792. GG>     mov dx,ComPort
  793. GG>     mov cx,19
  794. That's very bad style.  19 is the size of the buffer, isn't it?  Much safer
  795. to code it as
  796.         mov cx,sizeof(FossilInformation)
  797. GG>     int 14h
  798. GG>     push ds
  799. GG>     mov ax,es:[di+6]  { segment }
  800. This is dangerous.  You don't know the values in ES and DI any more; the
  801. Fossil has probably changed them.  In any case, it's clearer to write
  802.         mov ax,FossilInformation.Segment
  803. GG>     mov ds,ax
  804. GG>     mov si,es:[di+4]  { offset, DS:SI holds seg:ofs of asciiz string
  805. }
  806. Same problem here.  Use
  807.         mov si,FossilInformation.Offset
  808. or replace both instructions with
  809.         lds si,FossilInformation.StringAddress
  810. I didn't notice any problems below here.
  811.  
  812. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  813.  
  814.  
  815. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  816.  
  817. Conference 4
  818. Date       03-11-92 22:48:50
  819. From       Dj Murdoch
  820. To         Duke Normandin
  821. Subject    Re: Pascal Vs. C
  822.  
  823.  JM>2) you have to import every single function or proc.
  824. DN> Wouldn't that result in less bloated code -- not having to import the
  825. DN> entire library in order to use on or two functions therein?
  826. I think you misunderstand the way TP works.  When Jud says import, he means
  827. "makes available for use".  Just because it's available, doesn't mean it
  828. gets linked in.  The TP linker is pretty good at leaving out code that you
  829. don't use.
  830. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  831.  
  832.  
  833. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  834.  
  835. Conference 4
  836. Date       03-11-92 22:50:50
  837. From       Dj Murdoch
  838. To         Jud Mccranie
  839. Subject    Re: Pascal Vs. C
  840.  
  841.  JM> Optimized Pascal should be the same as optimized C.  JPI's system
  842. JM> has the same code generator for Pascal, Modula-2, and C, so I'm pretty
  843. JM> sure you would get the same lever of optimization out of any one of
  844. JM> them.  I have JPI's Pascal and Modula-2, so I could do a test, but I'm
  845. JM> pretty sure that they would be the same.
  846. Have you used JPI Pascal much?  The only other message I've seen from someone
  847. who's used it was on Usenet; he found it so buggy as to be unusable, though
  848. he liked the Modula-2 and C compilers.
  849. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  850.  
  851.  
  852. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  853.  
  854. Conference 4
  855. Date       03-11-92 23:09:10
  856. From       Dj Murdoch
  857. To         CHRISTOPHER KODANI
  858. Subject    Re: Borland pascal 6.1?
  859.  
  860.  CK> This also makes me wonder, what would happen if I bought TP6.0 and
  861. CK> Borland came out with a new version next week?  Would they upgrade for
  862. CK> free?  (I think they should).  And if I had bought version 6 say, when
  863. CK> it first came out, how much would an upgrade cost?
  864. I don't know what the price would be, but it would almost certainly not be
  865. free.  Borland gives free upgrades if you buy after the new product announcementbut not before.  No TP 6.0 successor has been officially announced yet, as
  866. far as I
  867. know.
  868. CK> Personally, I believe that upgrades should be very cheap, simply because
  869. CK> the company that developed the software already got your money once.
  870. CK> They probably priced their software assuming that you would buy
  871. CK> only on version.  Thus, the price of an upgrade should only cover the
  872. CK> costs of printing, packaging, and distribution.  The advantage of a
  873. CK> company doing so would be that 1) we end users would like them a lot
  874. and
  875. CK> tout their products and 2) they could keep old users (and not lose that
  876. CK> share of the market).
  877. In fact, I've heard the economics of it are almost exactly the opposite.
  878. Companies have to do a huge amount of expensive work to get a single new
  879. sale, but it's very easy for them to sell upgrades to current users.  They
  880. sell the original aiming
  881. to break even, and make all their money on the upgrades.  So I've been told,
  882. anyways.
  883. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  884.  
  885.  
  886. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  887.  
  888. Conference 4
  889. Date       03-11-92 23:16:00
  890. From       Dj Murdoch
  891. To         Jud Mccranie
  892. Subject    Re: Why I Like Tp 5.5 Ide More Than 6.0
  893.  
  894.  JM> It doesn't hurt that much to leave it in, but I usually remember to
  895. JM> take it out when I'm finished since I'm usually still there.
  896. Watch out if you ever forget - it can be very dangerous.  A few buggy programs
  897. (like PKARC 3.6 from a few years ago) fiddle with the debug interrupt vector,
  898. and don't restore it when they're done.  This usually doesn't matter, since
  899. there's
  900. no good reason to call it unless you've installed a handler for it.  But
  901. if you run a program that's got an INLINE($CC) left sitting in it after PKARC
  902. 3.6, you'll jump to where its handler used to be, and die horribly.
  903. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  904.  
  905.  
  906. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  907.  
  908. Conference 4
  909. Date       03-11-92 23:23:30
  910. From       Dj Murdoch
  911. To         Richard Morris
  912. Subject    Re: Borland pascal?
  913.  
  914.  RM> Jeff Duntemann the Chief Editor is a known Pascal-a-holic
  915. RM> and thus the Magazine is perhaps 2/3 pascal code.  IMO it
  916. RM> is the Best programming magazine to eminate from the U.S.
  917. RM> (Computer Language and Dr. Dobbs being closely tied for second).
  918. I agree with you that PC Techniques is number one, but I'd put CLM way down
  919. the list these days.  It used to be good, but I let my subscription lapse
  920. when I found the only article I got anything out of was the column by Plauger.
  921. Dr.  Dobbs
  922. is good, but I can only take it in small doses.
  923. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  924.  
  925.  
  926. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  927.  
  928. Conference 4
  929. Date       03-11-92 23:26:20
  930. From       Dj Murdoch
  931. To         James Digiacomo
  932. Subject    Re: Dynamic Arrays in Turbo Pascal
  933.  
  934.  JD> For some reason, my program runs fine within TP's IDE. But
  935. JD> when I compile my program to and .EXE file, the nightmare begins...
  936. Generally this signals that you've got an uninitialized variable.  You've
  937. been lucky to have it take a good value in the IDE, but aren't so lucky outside.Take a look around for my Clearmem unit (CLEARMEM.ZIP on PDN Pascal); it
  938. helps to find
  939. these errors, by letting you clear memory to a fixed value before each run.
  940. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  941.  
  942.  
  943. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  944.  
  945. Conference 4
  946. Date       03-12-92 08:34:50
  947. From       Dj Murdoch
  948. To         Richard Morris
  949. Subject    Re: Ancestor VMT
  950.  
  951.  RM> It is possible to UNDERwrite into an object, to add
  952. RM> methods to an existing Object.  I'm not totally sure of
  953. RM> the How but I could work it out from principles, this is
  954. RM> something that Chris Burke once explained to me, and
  955. RM> promised to do a PNL article on it.  I'll annoy him again :-)
  956. I'd like to hear about it.  I can think of ways to do it for one type, but
  957. the patched in method wouldn't be inherited properly.
  958. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  959.  
  960.  
  961. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  962.  
  963. Conference 4
  964. Date       03-12-92 08:40:10
  965. From       Dj Murdoch
  966. To         Richard Morris
  967. Subject    Re: New Reader!
  968.  
  969.  RM> I personally don't like brief, until I finish my own
  970. RM> editor I'll continue to use TPE, I do use the IDE for
  971. RM> Q&D's. However I have seen people, who have been using
  972. RM> QEDIT and BRIEF for years, work so fast that I can only stand on in
  973. awe.
  974. Are you using TPE 3.1 with TD286?  I haven't found a compatible set of options
  975. to let me do that in Desqview, yet.  The problem is that TPE grabs all the
  976. EMS memory and leaves no space for TD286; if I tell TPE to leave some space,
  977. then it won't
  978. load anything but tiny source files.
  979. I'm working mostly on small things now, so I use the IDE or TD, but I want
  980. to get TD286 back without dedicating huge gobs of memory to it.
  981. * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  982.  
  983.  
  984. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  985.  
  986. Conference 4
  987. Date       03-13-92 11:30:00
  988. From       Werner Berghofer
  989. To         David G. Edwards
  990. Subject    Turbo Pascal 6.0 is screwy!  Help!
  991.  
  992.        David,
  993. > One of the easiest mistakes to make is to use a global variable
  994. > I : INTEGER in lots of procedures, functions and for-loops.
  995.       you are right, but fortunately in Turbo Pascal 6.0 it simply is not
  996. possible to use a global scalar variable as a counter in for-loops located
  997. in different procedures or functions.  If you ever attempt to do this the
  998. compiler refuses
  999. to work, giving the error message "Illegal control variable".
  1000.       W.
  1001. * Origin: God is real... unless declared integer. (2:310/90.100)
  1002.  
  1003.